Avant de se plonger dans des analyses spécifiques, il est essentiel d’examiner les données pour comprendre leur structure, leurs variables et leurs statistiques de base. Nous chargerons les données, examinerons les premières lignes et passerons en revue les types de données et les statistiques sommaires.
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Rows: 731 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (15): instant, season, yr, mnth, holiday, weekday, workingday, weathers...
## date (1): dteday
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Rows: 17379 Columns: 17
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (16): instant, season, yr, mnth, hr, holiday, weekday, workingday, weat...
## date (1): dteday
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Les statistiques descriptives du jeu de données indiquent que les variables telles que la température (temp), la température ressentie (atemp), l’humidité (hum), la vitesse du vent (windspeed), ainsi que les compteurs de location de vélos (casual, registered, cnt) varient considérablement. Voici une interprétation des résultats :
Saisonnalité et Température: Les températures varient selon les saisons, avec des températures minimales observées en hiver (season: 4) et des températures maximales en été (season: 2). Cela pourrait influencer la demande de location de vélos, car les utilisateurs préfèrent généralement des conditions météorologiques plus clémentes pour le cyclisme.
Tendances Annuelles et
Mensuelles: La variable yr indique les années
2011(0) et 2012(1), permettant des analyses comparatives entre les deux
années. La variable mnth montre la répartition mensuelle,
ce qui est essentiel pour examiner les tendances mensuelles de la
location des vélos.
Jours Fériés et Jours
Ouvrables: La variable holiday montre les jours
fériés, et workingday indique si le jour est ouvrable. Ces
facteurs peuvent avoir un impact significatif sur le nombre de locations
(cnt), car les jours fériés et non ouvrables pourraient voir un nombre
différent de locations par rapport aux jours ouvrables.
Conditions
Météorologiques: Les conditions météorologiques
(weathersit) sont classées de 1 (temps clair) à 3 (neige
légère ou pluie légère), et ont une incidence directe sur la décision de
louer un vélo. Des conditions météorologiques défavorables peuvent
réduire le nombre de locations.
Utilisateurs
Occasionnels vs Enregistrés: Le nombre d’utilisateurs
occasionnels (casual) et enregistrés
(registered) fournit des informations sur les différents
types d’utilisateurs du service de partage de vélos. Les utilis
Examen des Données
DAY: Avant de détailler les analyses, un examen préliminaire des
données journalières est effectué pour assurer une compréhension globale
des variables et de leur comportement général. La visualisation des
premières entrées via head(day_data) offre un aperçu
immédiat de la distribution quotidienne des variables. Les statistiques
résumées par summary(day_data) offrent des mesures
descriptives clés telles que la moyenne, la médiane et les plages de
données pour chaque variable, révélant ainsi la présence de toute
anomalie ou tendance notable. La structure des données est également
examinée avec str(day_data) pour confirmer les types de
données et identifier d’éventuelles irrégularités dans le formatage,
telles que des données manquantes ou des types de variables
inappropriés.
## # A tibble: 6 × 16
## instant dteday season yr mnth holiday weekday workingday weathersit
## <dbl> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2011-01-01 1 0 1 0 6 0 2
## 2 2 2011-01-02 1 0 1 0 0 0 2
## 3 3 2011-01-03 1 0 1 0 1 1 1
## 4 4 2011-01-04 1 0 1 0 2 1 1
## 5 5 2011-01-05 1 0 1 0 3 1 1
## 6 6 2011-01-06 1 0 1 0 4 1 1
## # ℹ 7 more variables: temp <dbl>, atemp <dbl>, hum <dbl>, windspeed <dbl>,
## # casual <dbl>, registered <dbl>, cnt <dbl>
## instant dteday season yr
## Min. : 1.0 Min. :2011-01-01 Min. :1.000 Min. :0.0000
## 1st Qu.:183.5 1st Qu.:2011-07-02 1st Qu.:2.000 1st Qu.:0.0000
## Median :366.0 Median :2012-01-01 Median :3.000 Median :1.0000
## Mean :366.0 Mean :2012-01-01 Mean :2.497 Mean :0.5007
## 3rd Qu.:548.5 3rd Qu.:2012-07-01 3rd Qu.:3.000 3rd Qu.:1.0000
## Max. :731.0 Max. :2012-12-31 Max. :4.000 Max. :1.0000
## mnth holiday weekday workingday
## Min. : 1.00 Min. :0.00000 Min. :0.000 Min. :0.000
## 1st Qu.: 4.00 1st Qu.:0.00000 1st Qu.:1.000 1st Qu.:0.000
## Median : 7.00 Median :0.00000 Median :3.000 Median :1.000
## Mean : 6.52 Mean :0.02873 Mean :2.997 Mean :0.684
## 3rd Qu.:10.00 3rd Qu.:0.00000 3rd Qu.:5.000 3rd Qu.:1.000
## Max. :12.00 Max. :1.00000 Max. :6.000 Max. :1.000
## weathersit temp atemp hum
## Min. :1.000 Min. :0.05913 Min. :0.07907 Min. :0.0000
## 1st Qu.:1.000 1st Qu.:0.33708 1st Qu.:0.33784 1st Qu.:0.5200
## Median :1.000 Median :0.49833 Median :0.48673 Median :0.6267
## Mean :1.395 Mean :0.49538 Mean :0.47435 Mean :0.6279
## 3rd Qu.:2.000 3rd Qu.:0.65542 3rd Qu.:0.60860 3rd Qu.:0.7302
## Max. :3.000 Max. :0.86167 Max. :0.84090 Max. :0.9725
## windspeed casual registered cnt
## Min. :0.02239 Min. : 2.0 Min. : 20 Min. : 22
## 1st Qu.:0.13495 1st Qu.: 315.5 1st Qu.:2497 1st Qu.:3152
## Median :0.18097 Median : 713.0 Median :3662 Median :4548
## Mean :0.19049 Mean : 848.2 Mean :3656 Mean :4504
## 3rd Qu.:0.23321 3rd Qu.:1096.0 3rd Qu.:4776 3rd Qu.:5956
## Max. :0.50746 Max. :3410.0 Max. :6946 Max. :8714
## spc_tbl_ [731 × 16] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ instant : num [1:731] 1 2 3 4 5 6 7 8 9 10 ...
## $ dteday : Date[1:731], format: "2011-01-01" "2011-01-02" ...
## $ season : num [1:731] 1 1 1 1 1 1 1 1 1 1 ...
## $ yr : num [1:731] 0 0 0 0 0 0 0 0 0 0 ...
## $ mnth : num [1:731] 1 1 1 1 1 1 1 1 1 1 ...
## $ holiday : num [1:731] 0 0 0 0 0 0 0 0 0 0 ...
## $ weekday : num [1:731] 6 0 1 2 3 4 5 6 0 1 ...
## $ workingday: num [1:731] 0 0 1 1 1 1 1 0 0 1 ...
## $ weathersit: num [1:731] 2 2 1 1 1 1 2 2 1 1 ...
## $ temp : num [1:731] 0.344 0.363 0.196 0.2 0.227 ...
## $ atemp : num [1:731] 0.364 0.354 0.189 0.212 0.229 ...
## $ hum : num [1:731] 0.806 0.696 0.437 0.59 0.437 ...
## $ windspeed : num [1:731] 0.16 0.249 0.248 0.16 0.187 ...
## $ casual : num [1:731] 331 131 120 108 82 88 148 68 54 41 ...
## $ registered: num [1:731] 654 670 1229 1454 1518 ...
## $ cnt : num [1:731] 985 801 1349 1562 1600 ...
## - attr(*, "spec")=
## .. cols(
## .. instant = col_double(),
## .. dteday = col_date(format = ""),
## .. season = col_double(),
## .. yr = col_double(),
## .. mnth = col_double(),
## .. holiday = col_double(),
## .. weekday = col_double(),
## .. workingday = col_double(),
## .. weathersit = col_double(),
## .. temp = col_double(),
## .. atemp = col_double(),
## .. hum = col_double(),
## .. windspeed = col_double(),
## .. casual = col_double(),
## .. registered = col_double(),
## .. cnt = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
Examen des Données
Horaires: De même, une analyse initiale des données horaires est
réalisée pour mettre en évidence les caractéristiques et tendances
intra-journalières. En observant les premières lignes avec
head(hour_data), nous pouvons identifier les schémas de
location de vélos qui pourraient varier tout au long de la journée. Les
résumés descriptifs obtenus par summary(hour_data) sont
essentiels pour comprendre les dynamiques sur une base horaire et pour
déceler les différences par rapport aux tendances journalières. Enfin,
la structure détaillée fournie par str(hour_data) garantit
que toutes les données horaires sont correctement formatées et prêtes
pour des analyses plus avancées.
## # A tibble: 6 × 17
## instant dteday season yr mnth hr holiday weekday workingday
## <dbl> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2011-01-01 1 0 1 0 0 6 0
## 2 2 2011-01-01 1 0 1 1 0 6 0
## 3 3 2011-01-01 1 0 1 2 0 6 0
## 4 4 2011-01-01 1 0 1 3 0 6 0
## 5 5 2011-01-01 1 0 1 4 0 6 0
## 6 6 2011-01-01 1 0 1 5 0 6 0
## # ℹ 8 more variables: weathersit <dbl>, temp <dbl>, atemp <dbl>, hum <dbl>,
## # windspeed <dbl>, casual <dbl>, registered <dbl>, cnt <dbl>
## instant dteday season yr
## Min. : 1 Min. :2011-01-01 Min. :1.000 Min. :0.0000
## 1st Qu.: 4346 1st Qu.:2011-07-04 1st Qu.:2.000 1st Qu.:0.0000
## Median : 8690 Median :2012-01-02 Median :3.000 Median :1.0000
## Mean : 8690 Mean :2012-01-02 Mean :2.502 Mean :0.5026
## 3rd Qu.:13034 3rd Qu.:2012-07-02 3rd Qu.:3.000 3rd Qu.:1.0000
## Max. :17379 Max. :2012-12-31 Max. :4.000 Max. :1.0000
## mnth hr holiday weekday
## Min. : 1.000 Min. : 0.00 Min. :0.00000 Min. :0.000
## 1st Qu.: 4.000 1st Qu.: 6.00 1st Qu.:0.00000 1st Qu.:1.000
## Median : 7.000 Median :12.00 Median :0.00000 Median :3.000
## Mean : 6.538 Mean :11.55 Mean :0.02877 Mean :3.004
## 3rd Qu.:10.000 3rd Qu.:18.00 3rd Qu.:0.00000 3rd Qu.:5.000
## Max. :12.000 Max. :23.00 Max. :1.00000 Max. :6.000
## workingday weathersit temp atemp
## Min. :0.0000 Min. :1.000 Min. :0.020 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:0.340 1st Qu.:0.3333
## Median :1.0000 Median :1.000 Median :0.500 Median :0.4848
## Mean :0.6827 Mean :1.425 Mean :0.497 Mean :0.4758
## 3rd Qu.:1.0000 3rd Qu.:2.000 3rd Qu.:0.660 3rd Qu.:0.6212
## Max. :1.0000 Max. :4.000 Max. :1.000 Max. :1.0000
## hum windspeed casual registered
## Min. :0.0000 Min. :0.0000 Min. : 0.00 Min. : 0.0
## 1st Qu.:0.4800 1st Qu.:0.1045 1st Qu.: 4.00 1st Qu.: 34.0
## Median :0.6300 Median :0.1940 Median : 17.00 Median :115.0
## Mean :0.6272 Mean :0.1901 Mean : 35.68 Mean :153.8
## 3rd Qu.:0.7800 3rd Qu.:0.2537 3rd Qu.: 48.00 3rd Qu.:220.0
## Max. :1.0000 Max. :0.8507 Max. :367.00 Max. :886.0
## cnt
## Min. : 1.0
## 1st Qu.: 40.0
## Median :142.0
## Mean :189.5
## 3rd Qu.:281.0
## Max. :977.0
## spc_tbl_ [17,379 × 17] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ instant : num [1:17379] 1 2 3 4 5 6 7 8 9 10 ...
## $ dteday : Date[1:17379], format: "2011-01-01" "2011-01-01" ...
## $ season : num [1:17379] 1 1 1 1 1 1 1 1 1 1 ...
## $ yr : num [1:17379] 0 0 0 0 0 0 0 0 0 0 ...
## $ mnth : num [1:17379] 1 1 1 1 1 1 1 1 1 1 ...
## $ hr : num [1:17379] 0 1 2 3 4 5 6 7 8 9 ...
## $ holiday : num [1:17379] 0 0 0 0 0 0 0 0 0 0 ...
## $ weekday : num [1:17379] 6 6 6 6 6 6 6 6 6 6 ...
## $ workingday: num [1:17379] 0 0 0 0 0 0 0 0 0 0 ...
## $ weathersit: num [1:17379] 1 1 1 1 1 2 1 1 1 1 ...
## $ temp : num [1:17379] 0.24 0.22 0.22 0.24 0.24 0.24 0.22 0.2 0.24 0.32 ...
## $ atemp : num [1:17379] 0.288 0.273 0.273 0.288 0.288 ...
## $ hum : num [1:17379] 0.81 0.8 0.8 0.75 0.75 0.75 0.8 0.86 0.75 0.76 ...
## $ windspeed : num [1:17379] 0 0 0 0 0 0.0896 0 0 0 0 ...
## $ casual : num [1:17379] 3 8 5 3 0 0 2 1 1 8 ...
## $ registered: num [1:17379] 13 32 27 10 1 1 0 2 7 6 ...
## $ cnt : num [1:17379] 16 40 32 13 1 1 2 3 8 14 ...
## - attr(*, "spec")=
## .. cols(
## .. instant = col_double(),
## .. dteday = col_date(format = ""),
## .. season = col_double(),
## .. yr = col_double(),
## .. mnth = col_double(),
## .. hr = col_double(),
## .. holiday = col_double(),
## .. weekday = col_double(),
## .. workingday = col_double(),
## .. weathersit = col_double(),
## .. temp = col_double(),
## .. atemp = col_double(),
## .. hum = col_double(),
## .. windspeed = col_double(),
## .. casual = col_double(),
## .. registered = col_double(),
## .. cnt = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
Une étape fondamentale dans le prétraitement des données pour toute analyse de science des données consiste à vérifier la présence de valeurs manquantes au sein des ensembles de données. Les valeurs manquantes peuvent conduire à des biais dans l’analyse et affecter la performance des modèles prédictifs. Ainsi, nous avons procédé à une vérification exhaustive des ensembles de données journalières et horaires.
Pour l’ensemble de données horaires, la commande
sum(is.na(hour_data)) a été exécutée pour compter le nombre
total de valeurs manquantes. Le résultat obtenu est
\[1] 0\, ce qui indique qu’il n’y a aucune valeur manquante
dans cet ensemble de données. Cela suggère que les données horaires sont
complètes et ne nécessitent pas d’imputation ou de traitement des
valeurs manquantes.
De manière similaire, l’ensemble de données journalières a été soumis
à la même vérification en utilisant sum(is.na(day_data)).
Le résultat, également \[1] 0\, confirme l’absence de
valeurs manquantes dans cet ensemble de données. Ce niveau d’intégrité
des données est exceptionnel et permet de poursuivre les analyses sans
la nécessité d’adresser des problèmes de données incomplètes.
## [1] 0
## [1] 0
Un aspect crucial de la préparation des données est l’identification et la gestion des entrées en double. Les doublons peuvent fausser l’analyse et conduire à des interprétations incorrectes. Afin de garantir l’unicité de nos observations, nous avons effectué une vérification des doublons sur les ensembles de données horaires et journalières.
La commande sum(duplicated(hour_data)) nous a permis de
comptabiliser le nombre total d’enregistrements en double dans les
données horaires. Le résultat retourné est \[1] 0,
indiquant qu’il n’existe aucun doublon dans cet ensemble de données.
Cela assure que chaque observation horaire est unique et augmente la
fiabilité de toute analyse temporelle effectuée sur ces données.
De la même façon, l’ensemble de données journalières a été examiné
avec la commande sum(duplicated(day_data)). Le résultat,
tout aussi \[1] 0, confirme qu’il n’y a pas de doublons
dans les données journalières.
## [1] 0
## [1] 0
Nous allons maintenant examiner nos données pour répondre aux questions spécifiques posées.
#Comment les températures changent-elles selon les saisons ? Quelles sont les températures moyennes et médianes ?
Nous avons analysé l’évolution de la température en fonction des saisons en calculant les températures moyennes et médianes. Cet examen permet d’appréhender l’influence potentielle des conditions météorologiques saisonnières sur la fréquence de location des vélos. Les résultats obtenus sont les suivants :
0.2975 et une médiane de 0.2858, le
printemps montre des températures modérées qui pourraient encourager
l’utilisation de vélos après l’hiver froid.0.5444 et une médiane de
0.5621, ce qui est typique de cette saison chaude et peut
correspondre à un pic d’utilisation des vélos.0.7063 et une médiane de 0.7158, suggérant que
les conditions restent favorables à la location de vélos.0.4229 et une médiane
de 0.4092, des valeurs qui peuvent décourager l’utilisation
de vélos comparativement aux autres saisons.Ces observations sont essentielles pour les décideurs dans le domaine du partage de vélos, car elles indiquent des périodes de demande potentielle plus élevée ou plus faible. Les stratégies de disponibilité des vélos et de marketing peuvent ainsi être ajustées pour optimiser le service tout au long de l’année.
## # A tibble: 4 × 3
## season mean_temp median_temp
## <dbl> <dbl> <dbl>
## 1 1 0.298 0.286
## 2 2 0.544 0.562
## 3 3 0.706 0.715
## 4 4 0.423 0.409
#Y a-t-il une corrélation entre la température (temp/atemp) et le nombre total de locations de vélos ?
##Corrélation entre Température et Nombre Total de Locations de Vélos
Nous avons exploré la relation entre les facteurs météorologiques et le comportement des utilisateurs en matière de location de vélos. Plus précisément, nous avons examiné la corrélation entre la température mesurée (temp), la température ressentie (atemp), leur moyenne (mean_temp_atemp), et le nombre total de locations de vélos (cnt).
Le corrplot généré illustre les coefficients de corrélation entre ces variables. Les cercles les plus grands et les plus foncés indiquent une corrélation plus forte. Selon le corrplot, nous observons les points suivants :
Une forte corrélation positive entre temp et atemp, ce qui est attendu puisque ces mesures sont souvent liées ; La variable mean_temp_atemp montre également une forte corrélation positive avec temp et atemp, confirmant qu’elle est une représentation adéquate de la température générale perçue ; Plus important encore, temp, atemp, et mean_temp_atemp affichent une corrélation positive avec cnt, suggérant que des températures plus élevées sont associées à une augmentation du nombre de locations de vélos. Ces résultats impliquent que les conditions météorologiques plus chaudes, qui sont confortables pour les cyclistes, pourraient favoriser une plus grande utilisation des services de partage de vélos. Cette information est essentielle pour les opérateurs de services de partage de vélos, car elle peut les aider à planifier et à ajuster la disponibilité des vélos en fonction des conditions météorologiques prévues.
## corrplot 0.92 loaded
#Quelles sont les températures moyennes, l’humidité, la vitesse du vent et les locations totales par mois ?
Nous avons calculé les moyennes mensuelles de la température, de l’humidité, de la vitesse du vent et des locations totales pour révéler des tendances saisonnières significatives. Voici ce que nous avons découvert :
## # A tibble: 12 × 5
## mnth mean_temp mean_humidity mean_windspeed mean_rentals
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 0.236 0.586 0.206 2176.
## 2 2 0.299 0.567 0.216 2655.
## 3 3 0.391 0.588 0.223 3692.
## 4 4 0.470 0.588 0.234 4485.
## 5 5 0.595 0.689 0.183 5350.
## 6 6 0.684 0.576 0.185 5772.
## 7 7 0.755 0.598 0.166 5564.
## 8 8 0.709 0.638 0.173 5664.
## 9 9 0.616 0.715 0.166 5767.
## 10 10 0.485 0.694 0.175 5199.
## 11 11 0.369 0.625 0.184 4247.
## 12 12 0.324 0.666 0.177 3404.
#La température est-elle associée aux locations de vélos (enregistrés vs occasionnels) ?
Nous avons exploré la dynamique entre la température et les locations de vélos, en différenciant les utilisateurs occasionnels des utilisateurs enregistrés. Les données montrent une corrélation entre la température et la fréquence de location des vélos, avec une tendance nette indiquant que les utilisateurs enregistrés et occasionnels sont affectés différemment par les variations de température.
La visualisation des données, comme le montre le graphique ci-dessus, illustre les tendances suivantes :
La ligne représentant les utilisateurs occasionnels montre des pics marqués durant les périodes plus chaudes, tandis que celle des utilisateurs enregistrés démontre une consistance tout au long de l’échelle de température, bien que présentant également une tendance à l’augmentation avec la température.
Ces insights sont précieux pour les opérateurs de systèmes de partage de vélos, car ils indiquent la nécessité d’ajuster les stratégies de disponibilité et de marketing pour répondre aux besoins distincts des différents groupes d’utilisateurs tout au long de l’année.
### Analyse de Corrélation La seconde partie de notre analyse a consisté
à calculer la corrélation statistique pour appuyer visuellement les
tendances observées :
## temp casual registered
## temp 1.0000000 0.5432847 0.5400120
## casual 0.5432847 1.0000000 0.3952825
## registered 0.5400120 0.3952825 1.0000000
Il y a une corrélation modérée entre la température et les locations pour les utilisateurs occasionnels (casual) de 0.5433. Cela indique que les jours plus chauds voient une augmentation notable des locations de vélos par ces utilisateurs. La corrélation entre la température et les utilisateurs enregistrés (registered) est presque identique à 0.5400, ce qui indique que même si les utilisateurs enregistrés utilisent régulièrement le service, leur utilisation tend également à augmenter avec la température. La corrélation entre les locations des utilisateurs occasionnels et enregistrés est moins forte à 0.3953, ce qui peut indiquer des motifs d’utilisation différents entre les deux groupes.
L’analyse de la série temporelle du nombre de locations de vélos par jour révèle des modèles et des anomalies significatifs. La visualisation suivante a été générée pour illustrer ces tendances:
- Tendance Saisonnière : Le graphique montre une
variation claire qui suggère une tendance saisonnière, avec des pics de
locations durant certaines périodes, probablement liés aux saisons plus
chaudes, et des creux durant d’autres, qui coïncident vraisemblablement
avec les périodes plus froides. - Irrégularités : Des
fluctuations sont également visibles, indiquant des irrégularités qui
pourraient être causées par des jours spécifiques de la semaine, des
événements locaux, ou des conditions météorologiques changeantes. -
Pics et Creux : Les pics de location pourraient
correspondre aux jours ouvrables ou aux événements spéciaux, tandis que
les creux pourraient refléter des jours fériés ou des conditions
météorologiques défavorables.
Dans le but de construire un modèle prédictif pour les locations de vélos, nous avons appliqué le modèle de Holt-Winters pour lisser la série temporelle. Ce modèle prend en compte la saisonnalité des données, permettant de mieux comprendre les tendances sous-jacentes.
Le modèle de Holt-Winters ajuste la série temporelle en tenant compte de trois composants : la tendance, la saisonnalité et le niveau. La visualisation suivante montre les données observées (en noir) avec la courbe ajustée par le modèle (en rouge) :
- Tendance Générale : La courbe ajustée suit
étroitement la série temporelle observée, capturant les tendances
ascendantes et descendantes au fil du temps. - Saisonnalité
: Les motifs répétitifs reflètent la saisonnalité des données,
avec des périodes de forte demande alternant avec des périodes plus
calmes. - Niveau : Le modèle adapte également le niveau
général des données, indiquant le nombre moyen de locations sur la
période étudiée.
Le lissage de Holt-Winters facilite la prédiction de la demande future en fournissant une base plus stable à partir de laquelle les modèles prédictifs peuvent être développés. En tenant compte de la saisonnalité et des tendances, nous pouvons anticiper les variations futures de la demande et planifier l’allocation des vélos en conséquence.
Après avoir appliqué le modèle de lissage Holt-Winters aux données de locations de vélos, nous avons obtenu une série temporelle lissée qui reflète les tendances centrales et la saisonnalité sans le bruit des fluctuations quotidiennes.
Le modèle Holt-Winters a été choisi pour son efficacité à capturer à la fois la tendance et la saisonnalité dans les données. En lissant la série temporelle, nous réduisons la variabilité aléatoire et mettons en évidence les composantes structurelles, telles que la tendance et les motifs saisonniers.
La fréquence a été définie sur 12 pour correspondre aux cycles mensuels, supposant une saisonnalité annuelle avec des pics d’utilisation potentiellement liés aux saisons plus chaudes et des creux pendant les saisons plus froides.
Pour évaluer la stationnarité de la série lissée, le test de Dickey-Fuller augmenté a été effectué:
##
## Augmented Dickey-Fuller Test
##
## data: smoothed_ts
## Dickey-Fuller = -0.7527, Lag order = 8, p-value = 0.9658
## alternative hypothesis: stationary
La série n’est pas stationnaire (variance constante mais moyenne variable) le test de Dicker Fuller confirme cela avec une p_value = 0.96 (hyp nulle : non stationnaire), on distingue une saison (qui se répète deux fois).
Afin d’atteindre la stationnarité, nécessaire pour la modélisation ARIMA, nous avons appliqué une différenciation saisonnière à la série temporelle lissée des locations de vélos. Cette technique est conçue pour supprimer les effets saisonniers et les tendances, en calculant la différence entre chaque observation et son équivalent dans la saison précédente.
Le graphique de la série différenciée illustre les résultats de cette
transformation :
- Élimination des Tendances et Saisonnalité : Le
graphique montre que la tendance à long terme et les motifs saisonniers
sont moins apparents, indiquant une réussite potentielle dans la
stabilisation de la moyenne de la série.
Après la différenciation, un test de stationnarité peut être réappliqué pour confirmer que la série transformée satisfait les conditions de stationnarité. Si la série est en effet devenue stationnaire, elle peut être utilisée pour ajuster un modèle ARIMA, qui nécessite une série temporelle stationnaire pour des prédictions précises et fiables.
L’étape suivante dans notre analyse consiste à déterminer les ordres appropriés des termes autorégressifs (AR) et de moyenne mobile (MA) pour un modèle ARIMA qui pourrait être ajusté à notre série temporelle lissée et différenciée. Les tracés PACF et ACF nous fournissent des indices visuels pour cette identification.
Le tracé PACF montre une décroissance exponentielle, ce qui suggère des termes AR significatifs dans le modèle. Sur le tracé PACF, nous identifions un terme AR potentiel à l’ordre 2 (AR(2)), car après le décalage 2, les autocorrélations partielles tombent dans la zone de non-significativité.
Le tracé ACF, quant à lui, montre également une décroissance exponentielle et suggère la présence de termes MA. Un modèle MA(9) pourrait être approprié puisque l’ACF montre 9 barres significatives avant de tomber en dessous des seuils de confiance.
En ce qui concerne la saisonnalité, nous observons sur l’ACF une décroissance qui suggère un terme saisonnier MA, et sur le PACF un terme saisonnier AR avec un ordre potentiel de 4, indiquant un cycle saisonnier annuel quand on prend en compte une saisonnalité mensuelle (lag=12).
Compte tenu de ces observations, plusieurs modèles ARIMA saisonniers pourraient être envisagés : - ARIMA(2,0,0)(3,1,0)[12] - ARIMA(0,0,9)(4,1,0)[12] - ARIMA(2,0,0)(0,1,2)[12] - ARIMA(0,0,9)(0,1,2)[12]
Chacun de ces modèles sera évalué pour déterminer le meilleur ajustement en utilisant des critères tels que l’AIC (Critère d’Information d’Akaike), le BIC (Critère d’Information Bayésien) ou la validation croisée.
Concernant les saisons, sur le ACF ça décroit et sur le PACF on lit P = 4 sur le PACF ça décroit et sur le ACF on lit Q=4
#MA(9) ou AR(2)
#ARIMA(2,0,0)(3,1,0)h=12 ***
#ARIMA(0,0,9)(4,1,0)h=12 ****
#ARIMA(2,0,0)(0,1,2)h=12 *
#ARIMA(0,0,9)(0,1,2)h=12 **
Pour notre série temporelle des locations de vélos, un modèle ARIMA saisonnier a été ajusté et évalué. Le modèle choisi pour cette évaluation est ARIMA(2,0,0)(3,1,0)[12], indiquant un modèle autorégressif d’ordre 2 avec une composante saisonnière autorégressive d’ordre 3 et un cycle saisonnier de 12.
##
## Box-Ljung test
##
## data: residuals_m1
## X-squared = 0.057693, df = 1, p-value = 0.8102
## AIC du modèle m1: 10179.9
Les résidus du modèle fournissent une indication de la qualité de l’ajustement. Un modèle bien ajusté aura des résidus qui ressemblent à un bruit blanc, c’est-à-dire qu’ils seront indépendants et identiquement distribués avec une moyenne de zéro et une variance constante.
Le test de Ljung-Box a été appliqué pour tester l’indépendance des
résidus. Avec une valeur p de 0.8092, nous ne rejetons pas
l’hypothèse nulle que les résidus sont indépendants.
Un second modèle ARIMA(0,0,9)(4,1,0)[12] a été ajusté à la série temporelle lissée des locations de vélos. Ce modèle met l’accent sur les termes de moyenne mobile (MA) avec une forte composante saisonnière.
Après ajustement du modèle, les résidus ont été analysés pour évaluer la qualité de l’ajustement du modèle. Un modèle bien ajusté devrait avoir des résidus qui ressemblent à du bruit blanc, ce qui implique qu’ils sont indépendants et uniformément distribués avec une moyenne proche de zéro et une variance constante.
La visualisation des résidus montre une absence de structure ou de tendance apparente, ce qui est confirmé par les tracés ACF et PACF des résidus, ne montrant aucun pic significatif indiquant des autocorrélations résiduelles.
##
## Box-Ljung test
##
## data: residuals_m2
## X-squared = 0.064682, df = 1, p-value = 0.7992
## AIC du modèle m2: 10213.16
Le test de Ljung-Box a été effectué pour tester l’autocorrélation des
résidus. Avec une valeur p de 0.7992, il n’y a pas de
preuve statistique pour rejeter l’hypothèse nulle que les résidus sont
indépendants.
Dans la poursuite de notre sélection de modèle pour les prévisions de locations de vélos, un troisième modèle ARIMA a été considéré. Ce modèle, ARIMA(2,0,0)(0,1,2)[12], combine les termes autorégressifs avec des termes de moyenne mobile saisonnière.
Les résidus de ce modèle ont été analysés pour évaluer la qualité de l’ajustement, avec une attention particulière à l’indépendance et à la distribution des résidus.
La visualisation des résidus montre un comportement similaire à celui d’un bruit blanc, sans tendance ou saisonnalité apparente, ce qui indique un bon ajustement du modèle.
Les tracés ACF et PACF des résidus ne montrent pas de pics significatifs, suggérant que le modèle capture bien l’information dans les données sans laisser de structures autocorrélées non expliquées.
##
## Box-Ljung test
##
## data: residuals_m3
## X-squared = 0.126, df = 1, p-value = 0.7226
## AIC du modèle m3: 10131.05
Un quatrième modèle ARIMA a été considéré pour affiner davantage nos prévisions de locations de vélos. Ce modèle, ARIMA(0,0,9)(0,1,2)[12], met l’accent sur les termes de moyenne mobile avec une composante saisonnière significative de moyenne mobile.
Les résidus de ce modèle ont été examinés pour déterminer si le modèle capture adéquatement les dynamiques sous-jacentes des données de locations de vélos.
La visualisation des résidus montre une distribution aléatoire autour de zéro, ce qui suggère que le modèle ajuste bien les données sans laisser de structure autocorrélative non expliquée.
Les fonctions d’autocorrélation (ACF) et d’autocorrélation partielle (PACF) des résidus montrent que la plupart des autocorrélations résiduelles se situent à l’intérieur des bornes de confiance, ce qui indique que les résidus se comportent comme un bruit blanc.
##
## Box-Ljung test
##
## data: residuals_m4
## X-squared = 0.051688, df = 1, p-value = 0.8202
## AIC du modèle m4: 10206.35
Le test de Ljung-Box est utilisé pour vérifier l’absence
d’autocorrélation dans les résidus à un ensemble de décalages. Pour ce
modèle, le test donne une valeur p de 0.8202, ne
fournissant aucune preuve d’autocorrélation significative.
Après une analyse rigoureuse des différents modèles ARIMA, le modèle m3, ARIMA(2,0,0)(0,1,2)[12], s’est distingué comme étant le plus performant pour notre série temporelle de données sur les locations de vélos.
Le modèle m3 présente plusieurs avantages qui justifient sa sélection :
10131.05, le modèle m3 a l’AIC le plus bas parmi les
modèles examinés, indiquant le meilleur ajustement relatif.Le modèle ARIMA sélectionné automatiquement par la fonction
auto.arima fournit une structure complexe qui capture les
dynamiques des données. Les indicateurs statistiques tels que la
log-vraisemblance et les critères d’information (AIC, AICc, BIC) sont
des mesures clés de la performance du modèle.
Les mesures d’erreur sur l’ensemble d’apprentissage, telles que RMSE et MAE, quantifient l’écart entre les prédictions du modèle et les valeurs réelles. Ces mesures sont essentielles pour l’évaluation de la précision du modèle.
Des statistiques telles que l’ACF1 des résidus fournissent des informations sur l’autocorrélation résiduelle, un indicateur important de la qualité de l’ajustement du modèle.
Le modèle ARIMA(5,1,1)(2,0,0)[12] sera utilisé pour réaliser des prévisions.
## Series: smoothed_ts
## ARIMA(5,1,1)(2,0,0)[12]
##
## Coefficients:
## ar1 ar2 ar3 ar4 ar5 ma1 sar1 sar2
## -0.5396 -0.0782 -0.1907 -0.2164 -0.1897 0.6284 0.2808 0.3158
## s.e. 0.2044 0.0463 0.0472 0.0470 0.0402 0.2054 0.0372 0.0370
##
## sigma^2 = 104406: log likelihood = -5165.91
## AIC=10349.81 AICc=10350.07 BIC=10391
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -3.822976 321.0912 235.8936 -0.6894523 6.372798 0.4056763
## ACF1
## Training set 0.002163913
La mise en œuvre d’un modèle ARIMA après désaisonnalisation permet d’obtenir des prévisions plus fiables en tenant compte uniquement des tendances et motifs inhérents à la série temporelle.
Un graphique des différences des locations de vélos montre l’effet de la désaisonnalisation, mettant en évidence la tendance et les variations aléatoires restantes.
Une analyse de la fonction d’autocorrélation partielle (PACF) a été effectuée sur la série temporelle après désaisonnalisation pour identifier les ordres potentiels des termes autorégressifs du modèle ARIMA.
L’ACF présente une décroissance rapide après le premier décalage, ce qui
suggère un terme MA. Si ce décalage est le seul significatif, cela
pourrait indiquer un modèle MA(1).
Le PACF montre un pic significatif au premier décalage et ensuite il se stabilise, ce qui est typique d’un modèle AR(1).
Une analyse de la fonction d’autocorrélation (ACF) a également été conduite pour compléter l’analyse PACF et affiner le choix des termes du modèle ARIMA.
L’ACF montre une décroissance significative après le premier décalage, ce qui suggère un terme AR(1). Cela est cohérent avec un modèle qui a un seul terme autorégressif dans la partie non saisonnière de la série temporelle.
Un pic significatif au troisième décalage peut également suggérer un terme MA(3), indiquant que les erreurs de prévision actuelles peuvent être influencées par les erreurs des trois périodes précédentes.
Les résultats de l’ACF, en combinaison avec la PACF, indiquent que les modèles ARIMA(1,0,0) ou ARIMA(0,0,3) pourraient être appropriés pour modéliser la série temporelle. Ces modèles seront évalués pour leur performance de prévision et comparés pour sélectionner le modèle le plus approprié.
#AR(1)
#MA(3)
#ARIMA(1,0,0)
#ARIMA(0,0,3)
Une série de modèles ARIMA ont été ajustés sur la série temporelle désaisonnalisée afin de déterminer le candidat le plus adapté pour la prévision.
Un modèle ARIMA avec un seul terme autorégressif (ARIMA(1,0,0)) a été ajusté, et son diagnostic a été réalisé pour évaluer la qualité de l’ajustement.
Les résidus de ce modèle ne montrent aucun pic significatif dans les fonctions ACF et PACF, indiquant qu’il n’y a pas de corrélation automatique restante à prendre en compte.
Le test de Ljung-Box sur les résidus a donné une valeur-p de 0.5961, suggérant que les résidus sont indépendants et bien distribués.
L’AIC (Critère d’Information d’Akaike) du modèle ARIMA(1,0,0) est de 12343.73.
##
## Box-Ljung test
##
## data: residuals_m1_deseasonal
## X-squared = 0.28091, df = 1, p-value = 0.5961
## AIC du modèle m4: 12343.73
Un autre modèle examiné est le modèle ARIMA(0,0,3), qui intègre trois termes de moyenne mobile.
Les résidus de ce modèle ne montrent aucun pic significatif dans l’ACF ou le PACF, ce qui indique que les erreurs de prédiction ne sont pas autocorrélées.
Les graphiques ACF et PACF des résidus ne révèlent pas de pics significatifs, ce qui est une bonne indication que le modèle capte bien la structure de dépendance dans les données.
Le test de Ljung-Box donne une valeur-p très élevée de 0.9679, ce qui suggère que les résidus se comportent comme un bruit blanc, indiquant un bon ajustement du modèle aux données.
L’AIC pour le modèle ARIMA(0,0,3) est de 12346.61, légèrement supérieur à celui du modèle ARIMA(1,0,0). En théorie, le modèle avec le plus petit AIC est généralement le meilleur.
##
## Box-Ljung test
##
## data: residuals_m2_deseasonal
## X-squared = 0.0016148, df = 1, p-value = 0.9679
## AIC du modèle m2: 12346.61
Entre le modèle ARIMA(1,0,0) avec un AIC de 12343.73 et le modèle ARIMA(0,0,3) avec un AIC de 12346.61, le premier modèle est légèrement préféré selon le critère AIC. Cependant, d’autres critères, comme la simplicité du modèle et la facilité d’interprétation, peuvent aussi être pris en compte pour le choix final du modèle.
L’utilisation de la fonction auto.arima du package
forecast permet de sélectionner automatiquement le meilleur
modèle ARIMA en fonction des données désaisonnalisées. Cette méthode
prend en compte diverses combinaisons de termes AR, MA, et les
différenciations nécessaires pour trouver le modèle le plus
approprié.
## Series: diff_cnt
## ARIMA(0,1,3)
##
## Coefficients:
## ma1 ma2 ma3
## -0.5378 -0.3000 -0.1367
## s.e. 0.0367 0.0414 0.0361
##
## sigma^2 = 1664577: log likelihood = -6161.37
## AIC=12330.74 AICc=12330.8 BIC=12349.05
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -44.02235 1286.591 924.9182 97.16658 163.5412 0.8277705
## ACF1
## Training set 0.001903797
Le modèle sélectionné est un ARIMA(0,1,3), qui indique qu’aucun terme autorégressif n’est nécessaire, qu’une différenciation d’ordre 1 est suffisante pour rendre la série stationnaire et que trois termes de moyenne mobile sont inclus pour capturer la structure de dépendance dans les données.
Les coefficients des termes MA sont respectivement -0.5378, -0.3000, et -0.1367, avec des erreurs standard faibles, indiquant que les coefficients sont significatifs.
La log-vraisemblance du modèle est -6161.37, et les critères d’information tels que l’AIC, l’AICc, et le BIC sont respectivement 12330.74, 12330.8, et 12349.05. Ces valeurs fournissent une mesure de la qualité du modèle par rapport à la complexité.
La corrélation des résidus d’ordre 1 (ACF1) est très proche de zéro, ce qui suggère que le modèle a bien capturé la structure d’information dans les données.
Le modèle ARIMA(0,1,3) ajusté automatiquement semble être le meilleur modèle selon les critères d’information et les mesures d’erreur. Cependant, une vérification supplémentaire des résidus et des prévisions est recommandée pour confirmer la qualité des prévisions du modèle sélectionné.
Après avoir ajusté un modèle ARIMA automatiquement aux données désaisonnalisées, nous procédons à l’analyse des résidus pour évaluer la qualité de l’ajustement.
En se basant sur les diagnostics des résidus et le test de Ljung-Box, le modèle ARIMA ajusté automatiquement semble être bien spécifié. Les résidus semblent être du bruit blanc, ce qui est une indication que le modèle a capturé toute l’information disponible dans les données. Le modèle est donc jugé adéquat pour les prévisions.
##
## Box-Ljung test
##
## data: residuals_adjusted_deseasonal
## X-squared = 0.0026169, df = 1, p-value = 0.9592
## AIC du modèle auto arima: 12330.74
Les résidus du modèle ARIMA automatique choisi ne montrent pas de pics significatifs dans l’ACF ou le PACF, ce qui indique que les résidus ne présentent pas d’autocorrélation et que le modèle capture bien les dépendances dans les données.
Le test de Ljung-Box sur les résidus produit une valeur-p de 0.9592, suggérant fortement que les résidus sont bien distribués de façon aléatoire, ce qui est une caractéristique des bons modèles prédictifs.
L’AIC du modèle auto ARIMA est de 12330.74, ce qui est une mesure relative de la perte d’information. En général, un AIC plus bas indique un meilleur modèle. Cependant, il est important de comparer cette valeur avec celles d’autres modèles pour une évaluation complète.
Le modèle choisi plus haut, AR(1) donne un AIC légèrement plus élevé, de plus, il est plus simple. et d’après le principe de parsimony, il est préférable de choisir le plus simple.
Dans cette première partie du code, les données ont été divisées en deux ensembles distincts : un ensemble d’entraînement, comprenant les observations jusqu’à la 700e, et un ensemble de test à partir de la 701e observation. La série temporelle a été visualisée à l’aide de ts.plot pour observer la tendance et la saisonnalité dans les données.
## Analyse des Différences Premières
La série temporelle a été différenciée première sur l’ensemble d’entraînement pour rendre les données stationnaires.
La PACF a révélé une décroissance significative, suggérant une
composante AR(5). L’ACF décroissante a indiqué une composante MA(3).
## Series: train_data
## ARIMA(3,1,1)
##
## Coefficients:
## ar1 ar2 ar3 ma1
## 0.3160 -0.0401 -0.0916 -0.8718
## s.e. 0.0437 0.0410 0.0409 0.0237
##
## sigma^2 = 831740: log likelihood = -5754.54
## AIC=11519.08 AICc=11519.16 BIC=11541.82
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 32.40763 908.7347 637.0445 -44.80348 59.12826 0.876924
## ACF1
## Training set -0.006730811
La sélection automatique du modèle ARIMA sur l’ensemble d’entraînement (train_data) a abouti à la recommandation d’un modèle ARIMA(3,1,1). Le modèle semble capturer efficacement les tendances et les structures saisonnières de la série temporelle, comme en témoignent les faibles valeurs d’erreur et les coefficients significatifs. Ces résultats démontrent la capacité du modèle ARIMA sélectionné à représenter de manière adéquate la dynamique de la série temporelle et fournissent une base solide pour les prévisions futures.
## AIC du modèle fait manuellement: 11541.92
En parallèle, un modèle ARIMA a été ajusté manuellement sur l’ensemble d’entraînement avec une composante AR(5) et MA(3) à l’aide des résultats précédents.
Les prévisions des 31 prochaines observations ont été réalisées à l’aide de ce modèle et du modèle automatique.
Enfin, les résultats ont été visualisés avec ggplot2. Le graphique comparatif affiche les données réelles, les prévisions manuelles et automatiques pour évaluer la performance des modèles. Les séries temporelles sont distinguées par des couleurs différentes pour une interprétation claire.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
L’observation des 20 premières prédictions révèle une remarquable adéquation du modèle ajusté manuellement avec la réalité observée. Bien que des décalages temporels légers aient été notés occasionnellement, le modèle manuel parvient à capturer avec précision les variations de la série temporelle. En contraste, l’autoforecast semble stagnante autour de la moyenne, démontrant une faible capacité à saisir les fluctuations temporelles.
Cependant, sur les 10 dernières prévisions, une disparité émerge entre les véritables observations qui décroissent de manière exponentielle et les prédictions relativement stationnaires des deux modèles. Cela souligne les limites de la capacité prédictive des modèles, notamment lorsqu’ils sont confrontés à des changements abrupts dans la tendance temporelle.